package com.hframe.plugin.ueditor;

import com.hframe.Json.JsonFiletr;
import com.hframe.data.DRef;
import com.hframe.type.*;
import com.hframe.typefilter.EnumToName;
import com.hframe.typefilter.FilterRef;

/***
 * Created by heqian on 17-10-25.
 */
public class DConfig extends DRef<DConfig> {

    /* 上传图片配置项 */
    /**
     * 执行上传图片的action名称
     */
    public TEnum<EnumAction> imageActionName = new TEnum<>(EnumAction.UploadImage);

    /**
     * 提交的图片表单名称
     */
    public TString imageFieldName = new TString();

    /**
     * 上传大小限制，单位B
     */
    public TLong imageMaxSize = new TLong();

    /**
     * 上传图片格式显示
     */
    public TArray<TString> imageAllowFiles = new TArray<>(TString.class);

    /**
     * 是否压缩图片,默认是true
     */
    public TBoolean imageCompressEnable = new TBoolean();

    /**
     * 图片压缩最长边限制
     */
    public TInt imageCompressBorder = new TInt();

    /**
     * 插入的图片浮动方式
     */
    public TString imageInsertAlign = new TString();

    /**
     * 图片访问路径前缀
     */
    public TString imageUrlPrefix = new TString();

    /**
     * 上传保存路径,可以自定义保存路径和文件名格式
     * {filename} 会替换成原文件名,配置这项需要注意中文乱码问题
     * {rand:6} 会替换成随机数,后面的数字是随机数的位数
     * {time} 会替换成时间戳
     * {yyyy} 会替换成四位年份
     * {yy} 会替换成两位年份
     * {mm} 会替换成两位月份
     * {dd} 会替换成两位日期
     * {hh} 会替换成两位小时
     * {ii} 会替换成两位分钟
     * {ss} 会替换成两位秒
     * 非法字符 \ : * ? " < > |
     * <p>
     * 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename
     */
    public TString imagePathFormat = new TString();


     /* 涂鸦图片上传配置项 */
    /**
     * 执行上传涂鸦的action名称
     */
    public TEnum<EnumAction> scrawlActionName = new TEnum<>(EnumAction.UploadScrawl);

    /**
     * 提交的图片表单名称
     */
    public TString scrawlFieldName = new TString();

    /**
     * 上传保存路径,可以自定义保存路径和文件名格式
     */
    public TString scrawlPathFormat = new TString();

    /**
     * 上传大小限制，单位B
     */
    public TLong scrawlMaxSize = new TLong();

    /**
     * 图片访问路径前缀
     */
    public TString scrawlUrlPrefix = new TString();

    /**
     * 插入的图片浮动方式
     */
    public TString scrawlInsertAlign = new TString();

    /* 截图工具上传 */
    /**
     * 执行上传截图的action名称
     */
    public TString snapscreenActionName = new TString();

    /**
     * 上传保存路径,可以自定义保存路径和文件名格式
     */
    public TString snapscreenPathFormat = new TString();

    /**
     * 图片访问路径前缀
     */
    public TString snapscreenUrlPrefix = new TString();

    /**
     * 插入的图片浮动方式
     */
    public TString snapscreenInsertAlign = new TString();


    /* 抓取远程图片配置  */
    /**
     * ["127.0.0.1", "localhost", "img.baidu.com"]
     */
    public TArray<TString> catcherLocalDomain = new TArray<>(TString.class);

    /**
     * 执行抓取远程图片的action名称
     */
    public TEnum<EnumAction> catcherActionName = new TEnum<EnumAction>(EnumAction.CatchImage);

    /**
     * 提交的图片列表表单名称
     */
    public TString catcherFieldName = new TString();

    /**
     * 上传保存路径,可以自定义保存路径和文件名格式
     */
    public TString catcherPathFormat = new TString();

    /**
     * 图片访问路径前缀
     */
    public TString catcherUrlPrefix = new TString();

    /**
     * 上传大小限制，单位B
     */
    public TLong catcherMaxSize = new TLong();

    /**
     * 抓取图片格式显示
     */
    public TArray<TString> catcherAllowFiles = new TArray<>(TString.class);

    /* 上传视频配置 */
    /**
     * 执行上传视频的action名称
     */
    public TEnum<EnumAction> videoActionName = new TEnum<>(EnumAction.UploadVideo);

    /**
     * 提交的视频表单名称
     */
    public TString videoFieldName = new TString();

    /**
     * 上传保存路径,可以自定义保存路径和文件名格式
     */
    public TString videoPathFormat = new TString();

    /**
     * 视频访问路径前缀
     */
    public TString videoUrlPrefix = new TString();

    /**
     * 上传大小限制，单位B，默认100MB
     */
    public TLong videoMaxSize = new TLong();

    /**
     * 上传视频格式显示
     */
    public TArray<TString> videoAllowFiles = new TArray<>(TString.class);

    /** 上传文件配置 */
    /**
     * controller里,执行上传视频的action名称
     */
    public TEnum<EnumAction> fileActionName = new TEnum<>(EnumAction.UploadFile);

    /**
     * 提交的文件表单名称
     */
    public TString fileFieldName = new TString();

    /**
     * 上传保存路径,可以自定义保存路径和文件名格式
     */
    public TString filePathFormat = new TString();

    /**
     * 文件访问路径前缀
     */
    public TString fileUrlPrefix = new TString();

    /**
     * 上传大小限制，单位B，默认50MB
     */
    public TLong fileMaxSize = new TLong();

    /**
     * 上传文件格式显示
     */
    public TArray<TString> fileAllowFiles = new TArray<>(TString.class);

    /* 列出指定目录下的图片 */
    /**
     * 执行图片管理的action名称
     */
    public TEnum<EnumAction> imageManagerActionName = new TEnum<EnumAction>(EnumAction.ListImage);

    /**
     * 指定要列出图片的目录
     */
    public TString imageManagerListPath = new TString();

    /**
     * 每次列出文件数量
     */
    public TLong imageManagerListSize = new TLong();

    /**
     * 图片访问路径前缀
     */
    public TString imageManagerUrlPrefix = new TString();

    /**
     * 插入的图片浮动方式
     */
    public TString imageManagerInsertAlign = new TString();

    /**
     * 列出的文件类型
     */
    public TArray<TString> imageManagerAllowFiles = new TArray<>(TString.class);

    /* 列出指定目录下的文件 */
    /**
     * 执行文件管理的action名称
     */
    public TEnum<EnumAction> fileManagerActionName = new TEnum<>(EnumAction.ListFile);

    /**
     * 指定要列出文件的目录
     */
    public TString fileManagerListPath = new TString();

    /**
     * 文件访问路径前缀
     */
    public TString fileManagerUrlPrefix = new TString();

    /**
     * 每次列出文件数量
     */
    public TString fileManagerListSize = new TString();

    /**
     * 列出的文件类型
     */
    public TArray<TString> fileManagerAllowFiles = new TArray<>(TString.class);

    public DConfig() {
        FilterRef filterRef = new EnumToName<>();
        catcherActionName.filter(JsonFiletr.class).setGetCall(filterRef);
        fileManagerActionName.filter(JsonFiletr.class).setGetCall(filterRef);
        imageActionName.filter(JsonFiletr.class).setGetCall(filterRef);
        imageManagerActionName.filter(JsonFiletr.class).setGetCall(filterRef);
        scrawlActionName.filter(JsonFiletr.class).setGetCall(filterRef);
        videoActionName.filter(JsonFiletr.class).setGetCall(filterRef);
    }
}
